/**
 * Created by YangYan on 2016/5/8.
 */
(function () {
    var a=["world"];
    var value=a[0];
    a[1]=3.14;
    i=2;
    a[i]=3;
    a[i+1]="hello";
    a[a[i]]=a[0];
    // for(x in a){
    //     console.log(a[x]);
    // };

    o={};
    o[1]="one";
    o[2]="two";
    // for (x in o){
    //     console.log(o[x]);
    // }

    a[-1.23]=true;
    a["20"]=123;
    a[1.000];
    for(x in a){
      //  console.log(a[x]);
    };
    var a1=[,,,];
    //alert(0 in a1);
    var a2=[undefined];
   // alert(0 in a2);

    a=[1,2,3,4,5];
    a.length=3;
    for(x in a){
       // console.log(x);//索引
    };
    a=[1,2,3];
    //Object.defineProperty(a,"length",{writable:false});
    a.length=2;
   // alert(a.length); 3
    a=[];
    a[0]="zero";
    a[1]="one";
    a.push("two");
    a.push("four");
   // console.log(1 in a);
    //delete a[1];
   // console.log(a.length);
    for(var i=0;i<a.length;i++){
        if(!a[i]){continue;}
        //console.log(a[i]);
    };
    for(var i in a){
        if(!a.hasOwnProperty(i)) continue;
       // console.log(a[i]);
    };
//---------------------------------
    o={x:1,y:2,z:3};
    a.propertyIsEnumerable("toString");
    for(p in o){
       // console.log(p);
    };
    for (p in o){
        if(!o.hasOwnProperty(p)) continue;
    };
    for(p in o){
        if(typeof o[p] === "function") continue;
    };
    var data=[1,2,3,4,5];
    var sumOfSquares=0;
    data.forEach(function(x){
        sumOfSquares+=x*x;
    });
    //console.log(sumOfSquares);
    //多维数据
    var table=new Array(10);
    for(var i=0;i<table.length;i++){
        table[i]=new Array(10);
    };
    for(var row=0;row<table.length;row++){
        for(col=0;col<table[row].length;col++){
            table[row][col]=row*col;
        }
    };
    //console.log(table[5][7]);
    //array方法
    a=[1,2,3];
    // console.log(a.join());
    // console.log(a.join("  "));
    var b=new Array(5);
    // console.log(b.join("-"));
    // console.log(a.reverse().join("-"));
    // console.log(a.sort());

    var a=[33,4,1111,222];
    a.sort();
    a.sort(function(a,b){return a-b});
    //alert(a);
    a=['ant','Bug','cat','Dog'];
    a.sort();
    a.sort(function(s,t){var a=s.toLowerCase(); var b=t.toLowerCase();
        if(a<b){return -1;};
        if(a>b){return 1};
    });
    //console.log(a);
    //Array.concat()方法创建并返回一个新数组，而不会改变原数据的结构
    var a=[1,2,3];
    b=a.concat(4,5);
    // console.log(a);
    // console.log(b);
    //push()方法 在数据的尾部添加一个或多个元素，并返回数组新的长度。pop()方法却相反，它删除数组最后一个元素，减小
    //数组长度并返回它删除的值。注意：两个方法都修改并替换原始数组而非生成一个修改版的新数组。
    var stack=[];
    //console.log(stack.push(1,2));
    //console.log(stack.pop());
    var data=[1,2,3,4,5];
    var sum=0;
    data.forEach(function(value){
        sum+=value;
    });
    data.forEach(function(v,i,data){
        data[i]=v+1;
    });
   // console.log(data);
    //forEach没有break功能；
    function foreach(a,f,t){
        try{
            a.foreach(a,f,t);
        }catch(e) {
            if(e===foreach.break) return;
            else throw e;
        }
    };

    a=[1,2,3];
    b=a.map(function(x){
        return x*x;
    });
    c=a.filter(function(x){
        return x<2;
    })
   // console.log(b);
   // console.log(c);
   //  console.log(a.every(function(x){
   //      return x<10;
   //  }));
   //  console.log(a.some(function(x){
   //      return x>2;
   //  }));
   var a=[1,2,3,4,5];
   var sum=a.reduce(function(x,y){return x+y});
   //console.log(sum);
   var max=a.reduce(function(x,y){return (x>y)?x:y});
   //console.log(max);

    var objects=[{x:1},{y:2},{z:3}];
    var arr = [];
    var brr=[];
    arr['name'] = "MyName";
    arr['age'] = "18";
    arr['mobile'] = "123232323";
    brr['name'] = "MyNameb";
    brr['age'] = "19";
    brr['mobile'] = "323";
    var user = new Array();
    user[0]=arr;
    user[1]=brr;
    // console.log(user);
    // console.log(user.reduce(union));

    var merged=objects.reduce(union);//把数组转换成json对象
    // console.log(merged);
   function merge(o,p){
       for(prop in p){
           if(o.hasOwnProperty[prop]) continue;
           o[prop]=p[prop];
       }
       return o;
   };
    function extend(o,p){
        for(prop in p){
            o[prop]=p[prop];
        };
        return o;
    };
    function union(o,p){
        return extend(extend({},o),p);
    };
//判断类数组是否可以为数组
    function isArrayLike(o){
        if(o && typeof o === "object" && isFinite(o.length) && o.length>=0 && o.length===Math.floor(o.length)
         && o.length < (4294967279))
            return true;
        else
            return false;
    };

    var a={"0":"a","1":"b","2":"c",length:3};
    //Array.join(a,"+"); 这个方法在谷歌浏览器上行不通的
    // console.log(a);
    // Array.map(a,function(x){
    //    return x.toUpperCase();
    // });//貌似Array方法在谷歌浏览器上都行不通样；
    // console.log(a);
    // console.log(typeof Array);
    




})();
